package com.woniu.adopt.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.woniu.adopt.entity.PetAdopt;
import com.woniu.adopt.mapper.MessageMapper;
import com.woniu.adopt.mapper.PetAdoptMapper;
import com.woniu.adopt.mapper.PetMapper;
import com.woniu.adopt.vo.EchartsVo;
import com.woniu.adopt.vo.MessageVo;
import com.woniu.adopt.vo.PetAdoptVo;
import com.woniu.adopt.webSocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * 宠物领养申请service
 */
@Service
public class PetAdoptService {
    @Autowired
    PetAdoptMapper petAdoptMapper;

    @Autowired
    PetMapper petMapper;

    @Autowired
    MessageMapper messageMapper;

    @Autowired
    WebSocketServer webSocketServer;
    /**
     * 分页查询宠物领养申请
     *
     * @param pageNum  当前页
     * @param pageSize 每页数量
     * @param name     用户名称
     * @param time     申请时间
     */
    public PageInfo<PetAdoptVo> queryPetAdoptByPage(Integer pageNum, Integer pageSize, String name, Date time) {
        PageHelper.startPage(pageNum, pageSize).setOrderBy("a.insert_time desc");
        List<PetAdoptVo> petAdopts = petAdoptMapper.selectPetAdoptByCondition(name, time);
        return new PageInfo<>(petAdopts);
    }

    /**
     * 修改status
     *
     * @param id
     * @param status
     * @param date
     */
    @Transactional
    public void modify(Integer id, Integer status, Date date) {
        PetAdopt petAdopt = petAdoptMapper.selectByPrimaryKey(id);
        String str=null;//回复前台的消息
        MessageVo message = new MessageVo();
        message.setInsertTime(date);
        if (status == 1) {
            //更新宠物表单为领养和领养人
            petMapper.updateByState(petAdopt.getId(), petAdopt.getPetId(), 1);
            //发送消息给前台
            str="领养申请已通过";
        }
        if(status==2){
            str="领养申请未通过";
        }
        //查询单条记录
        PetAdoptVo petAdoptVo = petAdoptMapper.selectPetAdoptById(id);
        //组合消息
        String m = "亲爱的用户:"+petAdoptVo.getUser().getName()+",关于宠物"+petAdoptVo.getPet().getName()+"的"+str+"!";
        message.setMessage(m);
        //存入到数据库
        message.setUserId(petAdopt.getUserId());
        messageMapper.insertMessage(message);
        //发送消息给前台
        webSocketServer.sendOneMessage(String.valueOf(petAdopt.getUserId()),m);
        //更新领养表状态
        petAdoptMapper.updateByStatus(id, status, date);
    }

    /**
     * 分页查询历史宠物领养申请
     *
     * @param pageNum  当前页
     * @param pageSize 每页数量
     * @param name     用户名称
     * @param time     申请时间
     * @param status
     */
    public PageInfo<PetAdoptVo> queryOldPetAdoptByPage(Integer pageNum, Integer pageSize, String name, Date time, Integer status) {
        PageHelper.startPage(pageNum, pageSize).setOrderBy("a.update_time desc");
        List<PetAdoptVo> petAdopts = petAdoptMapper.selectOldPetAdoptByCondition(name, time, status);
        return new PageInfo<>(petAdopts);
    }

    public Integer queryPetAdoptByNum() {
        return petAdoptMapper.count();
    }

    public List<EchartsVo> queryWeekNum() {
        return petAdoptMapper.weekNumByCount();
    }
}
